
#pragma once

#include "../ioxx_include_device.hpp"
#include "./common.hpp"


namespace twixx {

    template <typename PinType>
    void master_recover_bus(const PinType &scl, const PinType &sda) {
        HAL_GPIO_INIT

        pinMode(pinNametoDigitalPin(_i2c.sda), INPUT);

        if (digitalReadFast(_i2c.sda) == LOW) {
            pinMode(pinNametoDigitalPin(_i2c.scl), OUTPUT);

            for (int i = 0; i < 20; i++) {
                digitalWriteFast(_i2c.scl, LOW);
                delayMicroseconds(10);
                digitalWriteFast(_i2c.scl, HIGH);
                delayMicroseconds(10);
            }
            pinMode(pinNametoDigitalPin(_i2c.scl), INPUT);
        }
    }

}  // namespace twixx